import axios from 'axios';
import { Pagination, PaginationData } from '@/types/global';
import { OrgVo } from '@/api/organization';
//  待办列表入参
export interface QueryToDoDTO {
  completeFlag: string; // 状态 NORMAL审批中,DRAFT草稿,DELETED作废,OVER结束
  formId: string; // 表单id 可模糊查询
  title: string; //  标题 可模糊查询
  userId: string; // 待办人编码
  type: string | null;
}
// 申请列表入参
export interface QueryMyApplyDTO {
  dealer: string; // 审批人编码
  formId: string | null; // 表单id 可模糊查询
  status: string | null; // 状态 NORMAL审批中,DRAFT草稿,DELETED作废,OVER结束
  title: string | null; // 标题 可模糊查询
}
// 申请列表出参
export interface MyApplyVO {
  createOrgId: string; // 创建组织ID
  createOrgName: string; // 创建组织名称
  createTime: string;
  creator: string; // 创建人id
  creatorName: string; // 创建人名称
  deleteFlag: string; // 是否删除,1已删除,0正常
  formId: string; // 表单ID
  id: string;
  path: string; // 表单地址
  processInstanceId: string; // 流程实例ID
  status: string; // NORMAL审批中,DRAFT草稿,DELETED作废,OVER结束
  tenantId: string; // 租户ID
  title: string; // 流程主题
  versionTime: string; // 时间戳
}

// 待办列表出参
export interface TodoVO {
  activityName: string; // 活动名称
  applicationCode: string; // 来源系统编码
  applicationName: string; // 来源系统名称
  completeFlag: string; // COMPLETED已处理UNCOMPLETED待处理DELETED已作废
  createOrgId: string; // 创建组织ID
  createOrgName: string; // 创建组织名称
  createTime: string;
  creator: string; // 创建人id
  creatorName: string; // 创建人名称
  deleteFlag: string; // 是否删除,1已删除,0正常
  formId: string; // 表单ID
  id: string;
  keyWords: string; // 关键词
  param: string; // 传入参数
  path: string; // 链接地址
  realDealer: string; // 真实处理人
  realDealerName: string; // 真实处理人姓名
  targetDealer: string; // 传入指定的处理人
  task: string;
  taskId: string; // 任务Id
  tenantId: string; // 租户ID
  title: string; // 流程主题
  type: string; // 类型：TODO待办TOREAD待阅
  useTerminal: string; // 使用哪个终端打开页面,空：既支持PC又支持移动端
  versionTime: string; // 时间戳
}
// 置为已办/已阅入参
export interface TodoDoneDTO {
  applicationCode: string | null; // 应用code
  realDealer: string | null; // 真实处理人
  realDealerName: string | null; // 真实处理人名称
  taskId: string; // 任务id
}
// 结办入参
export interface HandleFlowDTO {
  assignees: [] | string[];
  backActivityId: string | null; // 驳回至节点ID
  cascade: boolean | null; //  是否级联
  formId: string; //  表单ID
  multiSignTag: string | null; // 会签处理人变量名
  opinion: string; //  处理意见
  parameters: object | null;
  processInstanceId: string | null; //  流程实例id
  remark: null; //  说明
  taskId: string; //  任务Id
  toUserId: string | null; //  转办给用户ID
  toUserName: string | null; // 转办给用户姓名
}
export interface taskVO {
  assignee: string;
  executionId: string;
  id: string;
  name: string;
  owner: string;
  priority: string;
  processDefinitionId: string;
  processInstanceId: string;
  taskDefinitionKey: string;
  tenantId: string;
}
export interface TodoDetailVO {
  activityName: string; // 活动名称
  applicationCode: string; // 来源系统编码
  applicationName: string; // 来源系统名称
  completeFlag: string; // COMPLETED已处理UNCOMPLETED待处理DELETED已作废
  createOrgId: string; // 创建组织ID
  createOrgName: string; // 创建组织名称
  createTime: string;
  creator: string; // 创建人id
  creatorName: string; // 创建人名称
  deleteFlag: string; // 是否删除,1已删除,0正常
  formId: string; // 表单ID
  id: string;
  keyWords: string; // 关键词
  param: string; // 传入参数
  path: string; // 链接地址
  realDealer: string; // 真实处理人
  realDealerName: string; // 真实处理人姓名
  targetDealer: string; // 传入指定的处理人
  taskId: string; // 任务Id
  taskVO: taskVO;
  tenantId: string; // 租户ID
  title: string; // 流程主题
  type: string; // 类型：TODO待办TOREAD待阅
  useTerminal: string; // 使用哪个终端打开页面,空：既支持PC又支持移动端
  versionTime: string; // 时间戳
}

// 获取代办列表
export function acquireAgencylist(params: QueryToDoDTO) {
  return axios.post(`/flow/flow/selectTodoList`, params);
}

export function acquireMyApply(params: QueryMyApplyDTO) {
  return axios.post(`/flow/flow/queryMyApplies`, params);
}
export function delProcessInstanceByFormId(formId: string, remark: string) {
  return axios.get<PaginationData<OrgVo>>(
    `/flow/flow/deleteProcessInstanceByFormId/${formId}/?remark=${remark}`
  );
}
// 置为已办/已阅
export function sendTodoDone(params: TodoDoneDTO) {
  return axios.post(`/flow/flow/sendTodoDone`, params);
}
// 撤回是先用formid查询节点接口
export function queryNode(formId: string) {
  return axios.get<any>(`/flow/flow/getHistoryActivitys/${formId}`);
}
// 将任务结办
export function withdrawalofApplication(params: HandleFlowDTO) {
  return axios.post(`/flow/flow/handleTask`, params);
}

// 查询当前表单查询正在处理的任务列表
export function getCurrentTaskListByFormId(formId: string) {
  return axios.get<TodoDetailVO[]>(
    `/flow/flow/getCurrentTaskListByFormId/${formId}`
  );
}
